|
(******************************************************************************)
(**) ОТДЕЛ ПроМатем1+;
(******************************************************************************
* НАЗНАЧЕНИЕ: проверка точности вычислений трансцендентных функций
*
* ПРИМЕЧАНИЯ:
* Для каждого типа функции выбирается 20 случайных возрастающих
* значений аргумента. Далее для каждого значения вычисляется прямая функция,
* а к результатам применяется обратная функция. Потом вычисляется
* относительная ошибка результатов и первоначальных значений аргумента.
******************************************************************************)
ИСПОЛЬЗУЕТ
Матем ИЗ "...\Отделы\Числа\",
Вывод ИЗ "...\Отделы\Обмен\";
ПОСТ
АРГУМЕНТОВ = 20; (* число аргументов *)
ВИД
Вещ = Матем.Вещ;
Функция = ЗАДАЧА(x:Вещ):Вещ;
Вектор = РЯД АРГУМЕНТОВ+1 ИЗ Вещ;
(******************************************************************************)
ЗАДАЧА СлучАрг(x+:Вектор; от,до:Вещ);
(* Заполняет вектор аргументов случайными числами от <от> до <до>,
* округляет до 4-го знака после запятой и располагает в возрастающем порядке.*)
ПЕР
i,j,k:ЦЕЛ;
a:Вещ;
УКАЗ
ОТ i:=1 ДО АРГУМЕНТОВ ВЫП
a:=(до-от)*Матем.случ() + от;
ЕСЛИ МОДУЛЬ(a) < 1.D-4 ТО
a:=Матем.знак(a)*1.D-4
КОН;
x[i]:=ВШИРЦЕЛ(10000*a)/10000;
КОН;
(* Сортировка вставками *)
ОТ i:=1 ДО АРГУМЕНТОВ-1 ВЫП
k:=i;
a:=x[i];
ОТ j:=i+1 ДО АРГУМЕНТОВ ВЫП
ЕСЛИ x[j] < a ТО
k:=j;
a:=x[j]
КОН
КОН;
Матем.обмен(x[i],x[k])
КОН
КОН СлучАрг;
(******************************************************************************)
ЗАДАЧА Оборот(прямИмя-,обрИмя-:ЦЕПЬ; прямФ,обрФ:Функция; от,до:Вещ);
ПЕР
i:ЦЕЛ;
x0:Вектор;
y,x1,оо:Вещ;
УКАЗ
Вывод.Цепь('^x0, y=');
Вывод.Цепь(прямИмя);
Вывод.Цепь('(x0), x1=');
Вывод.Цепь(обрИмя);
Вывод.Цепь('(y), относ.ошибка^');
СлучАрг(x0,от,до);
ОТ i:=1 ДО АРГУМЕНТОВ ВЫП
y:=прямФ(x0[i]);
x1:=обрФ(y);
оо:=(x0[i]-x1)/x0[i];
Вывод.ЧВещ('%8.4f %23e %23e %15.4e^',x0[i],y,x1,оо)
КОН
КОН Оборот;
УКАЗ
Оборот('exp' ,'ln' ,Матем.exp ,Матем.ln ,-10,10);
Оборот('exp10','log10' ,Матем.exp10,Матем.log10 , -5, 5);
Оборот('exp2' ,'log2' ,Матем.exp2 ,Матем.log2 ,-15,15);
Оборот('sin' ,'arcsin',Матем.sin ,Матем.arcsin,-Матем.ПИ/2,Матем.ПИ/2);
Оборот('cos' ,'arccos',Матем.cos ,Матем.arccos, 0,Матем.ПИ);
Оборот('tg' ,'tg' ,Матем.tg ,Матем.arctg ,-Матем.ПИ/2,Матем.ПИ/2);
Оборот('sh' ,'sh' ,Матем.sh ,Матем.Arsh , 0, 5);
Оборот('ch' ,'ch' ,Матем.ch ,Матем.Arch , 0, 5);
Оборот('th' ,'th' ,Матем.th ,Матем.Arth , -5, 5);
КОН ПроМатем1.
▲ Вопросы, замечания и предложения высылайте на atimopheyev@yahoo.com или Издателю Глагола:
|
|